package com.rzcode.coinex.kernel.dao.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.rzcode.coinex.kernel.common.enums.LegalWalletState;
import com.rzcode.coinex.kernel.common.enums.PayModeEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;

/**
 * 合法钱包充值实体类，用于存储合法钱包充值的详细信息。
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "legal_wallet_recharge")
public class LegalWalletRecharge {

    /**
     * 充值记录ID，自增长主键。
     */
    @ApiModelProperty(value = "充值记录ID", example = "1")
    private Long id;

    /**
     * 会员，进行充值的会员信息。
     */
    @ApiModelProperty(value = "会员信息", required = true)
    private Member member;

    /**
     * 充值金额，本次充值的金额。
     */
    @ApiModelProperty(value = "充值金额", example = "100.00")
    private BigDecimal amount;

    /**
     * 支付凭证图片URL，支付完成后的凭证图片链接。
     */
    @ApiModelProperty(value = "支付凭证图片URL", example = "https://example.com/receipt.jpg")
    private String paymentInstrument;

    /**
     * 充值货币，充值所使用的货币类型。
     */
    @ApiModelProperty(value = "充值货币", required = true)
    private Coin coin;

    /**
     * 充值状态，充值的当前状态。
     */
    @ApiModelProperty(value = "充值状态", example = "PENDING")
    private LegalWalletState state;

    /**
     * 支付方式，充值所采用的支付方式。
     */
    @ApiModelProperty(value = "支付方式", example = "BANK_TRANSFER")
    private PayModeEnum payMode;

    /**
     * 备注，充值的额外备注信息。
     */
    @ApiModelProperty(value = "备注", example = "周末促销充值")
    private String remark;

    /**
     * 创建时间，充值记录创建的时间。
     */
    @ApiModelProperty(value = "创建时间", example = "2023-03-01 12:00:00")
    private LocalDateTime creationTime;

    /**
     * 处理时间，充值处理完成的时间。
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty(value = "处理时间", example = "2023-03-01 12:30:00")
    private Date dealTime;

    /**
     * 审核员，审核充值请求的管理员信息。
     */
    @ApiModelProperty(value = "审核员信息")
    private Admin admin;

    /**
     * 更新时间，充值记录最后更新的时间。
     */
    @ApiModelProperty(value = "更新时间", example = "2023-03-01 12:30:00")
    private LocalDateTime updateTime;
}
